#ifndef TREE_H
#define TREE_H

#include "pair.hpp"
#include "vector.hpp"
#include <qstring.h>

typedef struct TreeNode{
    char val;
    TreeNode* parent;
    Pair<TreeNode*, TreeNode*> lrchild; // 当作为二叉树时使用,保存左右子节点
    Vector<TreeNode*> children; // 当作为树时使用,保存所有子节点
} TreeNode;

class Tree
{
public:
    Tree();
    Tree(bool is_binary, QString str);
    ~Tree();

    virtual QString ToParenthesisString() const; // 将树转换为括号串

    int GetDepth() const;

    TreeNode *root;
    bool is_binary;
};

#endif // TREE_H
